package database;


/**
 * 1.% 表示任何字符出现任意次数，但是匹配不出NULL；
 *      select * from user_info where id like '%U0%0%';
 *
 * 2.(_) 只匹配单个任意字符
 *      select * from user_info where name like '_ame%';
 *
 * 3.通配符搜索处理一半要比普通的数据过滤语句所花儿福的时间更长
 *
 * 4.正则匹配
 *      select * from user_info where name REGEXP '.1';表示1左边任意数量任意字符
 *      select * from user_info where name REGEXP '1|2';表示1或2都可以
 *      select * from user_info where name REGEXP 'name_[2|3]';表示 name_2 或 name_3 只匹配一位
 *      select * from user_info where name REGEXP 'name_[^43]';表示除了name_4 或name_3以外符合的
 * 5.like匹配与正则匹配需要注意两者匹配'key'结果是不同的,like
 *   是匹配不出 'xkey',但是正则可以；
 *      select * from user_info where name like 'key';
 *      select * from user_info where name REGEXP 'key';
 ** 6.正则匹配字符类:
 *        类           类 说 明
 *    [:alnum:] 任意字母和数字(同[a-zA-Z0-9])
 *    [:alpha:] 任意字符(同[a-zA-Z])
 *    [:blank:] 空格和制表(同[\\t])
 *    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
 *    [:digit:] 任意数字(同[0-9])
 *    [:graph:] 与[:print:]相同，但不包括空格
 *    [:lower:] 任意小写字母(同[a-z])
 *    [:print:] 任意可打印字符
 *    [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
 *    [:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
 *    [:upper:] 任意大写字母(同[A-Z])
 *    [:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
*
 *   重复元字符
 *    元 字             符 说 明
 *    *              0个或多个匹配
 *    +              1个或多个匹配(等于{1,})
 *    ?              0个或1个匹配(等于{0,1})
 *    {n}            指定数目的匹配
 *    {n,}           不少于指定数目的匹配
 *    {n,m}          匹配数目的范围(m不超过255)
*
 *   定位元字符
 *    元 字 符          说 明
 *    ^              文本的开始
 *    $              文本的结尾
 *    [[:<:]]        词的开始
 *    [[:>:]]        词的结尾
*
 *  7.? 匹配它前面的任何字符 0 次或 1 次出现，如'sticks?' 可以匹配出 'stick' 和 'sticks'
*
 *  8. [[:digit:]]{4} 匹配4个任意数字
*
 *  9. ^[0-9\\.] 匹配以一个数或点开始的数
*
 *  10.函数        函 数 说 明
 *     Left()        返回串左边的字符
 *     Length()      返回串的长度
 *     Locate()      找出串的一个子串 LOCATE(substr,str) 返回字符串substr中第一次出现子字符串的位置 str。
 *                   判断site表中的url是否包含'http://'子串,如果不包含则拼接在url字符串开头
 *                   update site set url =concat('http://',url) where locate('http://',url)=0;
 *                   如何用sql查找所有“emails”字段中有“aa@fujieace.com”的用户？
 *                   select * from users where locate('aa@email.com',emails);
*
 *     Lower()       将串转换为小写
 *     Upper()       将串转为大写
 *     LTrim()       去掉串左边的空格
 *     Right()       返回串右边的字符
 *     RTrim()       去掉串右边的空格
 *     Soundex()     返回串的SOUNDEX值
 *     SubString()   返回子串的字符
*
 *  11.日期函数
 *     AddDate()     增加一个日期(天、周等)
 *     AddTime()     增加一个时间(时、分等)
 *     CurDate()     返回当前日期
 *     CurTime()     返回当前时间
 *     Date()        返回日期时间的日期部分
 *     DateDiff()    计算两个日期之差
 *     Date_Add()    高度灵活的日期运算函数
 *     Date_Format() 返回一个格式化的日期或时间串
 *     Day()         返回一个日期的天数部分
 *     DayOfWeek()   对于一个日期，返回对应的星期几
 *     Hour()        返回一个时间的小时部分
 *     Minute()      返回一个时间的分钟部分
 *     Month()       返回一个日期的月份部分
 *     Now()         返回当前日期和时间
 *     Second()      返回一个时间的秒部分
 *     Time()        返回一个日期时间的时间部分
 *     Year()        返回一个日期的年份部分
 *       11.1 查询某个月
 *          select * from cust where year(create_time) = 2019 and Month(create_time) = 6;
 *
 *  12.数值处理函数
 *      函 数             说 明
        Abs()       返回一个数的绝对值
        Cos()       返回一个角度的余弦
        Exp()       返回一个数的指数值
        Mod()       返回除操作的余数
        Pi()        返回圆周率
        Rand()      返回一个随机数
        Sin()       返回一个角度的正弦
        Sqrt()      返回一个数的平方根
        Tan()       返回一个角度的正切
 *  13.聚集函数
 *      AVG() 返回某列的平均值，自动忽略未null的值
 *          select avg(value_1),name from cust group by name;以name分组算每一组的平均值
        COUNT() 返回某列的行数，使用COUNT(*)对表中行的数目进行计数， 不管表列中包含的是空值(NULL)还是非空值。
                               使用COUNT(column)对特定列中具有值的行进行计数，忽略NULL值。
        MAX() 返回某列的最大值，自动忽略null
        MIN() 返回某列的最小值，自动忽略null
        SUM() 返回某列值之和，自动忽略null，
            select sum(value*value_1) from cust;每一行的两个字段相称求和
            select avg(distinct value_1) from cust;忽略value_1中重复的项；
 *  14.所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行，而HAVING过滤分组，即在
 *     GROUP BY 之后；这里有另一种理解方法，WHERE在数据分组前进行过滤；
 *          select name, count(*) as name_count from cust group by name having count(*) >= 2;筛选分组后count >=2的组
 *
 *  15.全文本搜索：InnoDB 不支持全文搜索，而MyISAM 支持
 *     通配符与正则表达式匹配的几个限制：
 *     1 性能：通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此，由于被搜索行数不
 *           断增加，这些搜索可能非常耗时。
 *     2 明确控制：使用通配符和正则表达式匹配，很难(而且并不总是能)明确地控制匹配什么和不匹配什么。例如，指定一个词必须匹
 *           配，一个词必须不匹配，而一个词仅在第一个词确实匹配的情况下才可以匹配或者才可以不匹配。
 *     3 智能化的结果：虽然基于通配符和正则表达式的搜索提供了非常灵活的搜索，但它们都不能提供一种智能化的选择结果的方法。
 *           例如，一个特殊词的搜索将会返回包含该词的所有行，而不区分包含单个匹配的行和包含多个匹配的行(按照可能是更好的
 *           匹配来排列它们)。类似，一个特殊词的搜索将不会找出不包含该词但包含其他相关词的行。
 *
 *  16.为了进行全文本搜索，必须索引被搜索的列，而且要随着数据的改变不断地重新索引。在对表列进行适当设计后， MySQL会自动进
 *     行所有的索引和重新索引;在索引之后， SELECT可与Match()和Against()一起使用以实际执行搜索。不要在导入数据时使用
 *     FULLTEXT 应该首先导入所有数据，然后再修改表， 定义FULLTEXT。 这样有助于更快地导入数据(而且使索引数据的总时间小于
 *     在导入每行时分别进行索引所需的总时间)。
 *
 *  17.进行全文本搜索:
 *     1 传递给 Match() 的值必须与FULLTEXT()定义中的相同。如果指定多个列，则必须列出它们(而且次序正确)。
 *     2 除非使用BINARY方式，否则全文本搜索不区分大小写。
 *       sql:SELECT
 *             note_text
 *           FROM
 *             productnotes
 *           WHERE MATCH(note_text) against('rabbit');
 *     3 全文本搜索的一个重要部分就是对结果排序。具有较高等级的行先返回:含词rabbit作为第3个词的行的等级比作为第20个词的行高。
 *       SELECT
 *       	note_text,
 *       	MATCH ( note_text ) against ( 'rabbit' ) AS rank
 *       FROM
 *       	productnotes
 *       结果见：全文搜索结果.txt
 *     4 使用查询扩展
 *       SELECT
 * 	        note_text
 *       FROM
 *          productnotes
 *       WHERE MATCH(note_text) against('anvils' WITH QUERY expansion );
 *       结果见：全文搜索结果.txt
 *     5 布尔文本搜索:
 *          要匹配的词；
 *          要排斥的词(如果某行包含这个词，则不返回该行，即使它包含其他指定的词也是如此)；
 *          排列提示(指定某些词比其他词更重要，更重要的词等级更高)；
 *          表达式分组；
 *          另外一些内容。
 *       即使没有FULLTEXT索引也可以使用但这是一种非常缓慢的操作
 *       为了匹配包含heavy但不包含任意以rope开始的词的行， 可使用以下查询：
 *          SELECT note_text from productnotes WHERE MATCH(note_text) against('heavy -rope*' in boolean mode);
 *       排除包含rope*(任何以rope开始的词，包括ropes)
 *                      全文本布尔操作符
 *       布尔操作符                           说 明
 *           +                               包含，词必须存在
 *           -                               排除，词必须不出现
 *           >                               包含，而且增加等级值
 *           <                               包含，且减少等级值
 *           ()                              把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
 *           ~                               取消一个词的排序值
 *           *                               词尾的通配符
 *           ""                              定义一个短语(与单个词的列表不一样，它匹配整个短语以便包含或排除这个短语)
 *
 *  18.插入：
 *      1 如果数据检索是最重要的(通常是这样)，则你可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY，指示MySQL降低INSERT
 *        语句的优先级，如下所示：
 *          Insert low_priority into
 *        这也适用于 UPDATE 和 DELETE 语句。
 *
 *  19.若想从表中删除所有行，不要使用delete，可以使用 TRUNCATE TABLE。它将完成相同的工作，但是速度更快(TRUNCATE 实际是
 *      删除原来的表并重新创建一个表，而不是转删除表中的数据)；
 *
 *  20.以下是几个需要知道的引擎：
 *     1 InnoDB是一个可靠的事务处理引擎，它不支持全文本搜索；
 *     2 MEMORY在功能等同于MyISAM， 但由于数据存储在内存(不是磁盘)中，速度很快(特别适合于临时表)；
 *     3 MyISAM是一个性能极高的引擎，它支持全文本搜索，但不支持事务处理。
 *
 *  21.使用视图：
 *     1 用 CREATE VIEW 语句来创建；
 *     2 使用SHOW | CREATE VIEW viewname；来查看创建视图的语句
 *     3 用DROP删除视图，其语法为DROP VIEW viewname;
 *     4 更新视图时，可以先用DROP再用CREATE，也可以直接用CREATE OR REPLACE VIEW。
 *
 *  22.使用存储过程：
 *     1 DELIMITER //
 *       CREATE PROCEDURE productpricing()
 *       BEGIN
 *       	SELECT AVG(pro_price) AS priceaverage
 *       	FROM products;
 *       END //
 *
 *
 */
public class Basis {

}